package com.seckill.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.seckill.mapper.SeckillProductMapper;
import com.seckill.pojo.entity.SeckillProduct;
import com.seckill.service.SeckillProductService;
import com.sky.constant.MessageConstant;

import com.sky.exception.BaseException;
import com.sky.result.PageResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;

@Service
@Slf4j
public class SeckillProductServiceImpl implements SeckillProductService {

    @Autowired
    private SeckillProductMapper seckillProductMapper;

    /**
     * 新增秒杀特价农产品
     * @param seckillProduct
     */
    @Override
    public void save(SeckillProduct seckillProduct) {
        // 设置创建时间、更新时间
        seckillProduct.setCreateTime(LocalDateTime.now());
        seckillProduct.setUpdateTime(LocalDateTime.now());
        // 设置已售数量为0
        seckillProduct.setSoldCount(0);
        
        seckillProductMapper.insert(seckillProduct);
    }

    /**
     * 分页查询秒杀特价农产品
     * @param page
     * @param pageSize
     * @param activityId
     * @return
     */
    @Override
    public PageResult pageQuery(int page, int pageSize, Long activityId) {
        // 设置分页参数
        PageHelper.startPage(page, pageSize);
        // 执行查询
        List<SeckillProduct> list = seckillProductMapper.pageQuery(activityId);
        Page<SeckillProduct> pageResult = (Page<SeckillProduct>) list;
        
        return new PageResult(pageResult.getTotal(), pageResult.getResult());
    }

    /**
     * 根据id查询秒杀特价农产品
     * @param id
     * @return
     */
    @Override
    public SeckillProduct getById(Long id) {
        return seckillProductMapper.getById(id);
    }

    /**
     * 修改秒杀特价农产品
     * @param seckillProduct
     */
    @Override
    public void update(SeckillProduct seckillProduct) {
        // 设置更新时间
        seckillProduct.setUpdateTime(LocalDateTime.now());
        
        seckillProductMapper.update(seckillProduct);
    }

    /**
     * 删除秒杀特价农产品
     * @param id
     */
    @Override
    public void delete(Long id) {
        seckillProductMapper.delete(id);
    }

    /**
     * 秒杀下单
     * @param productId
     * @param userId
     * @param count
     * @return 订单ID
     */
    @Override
    @Transactional
    public Long seckillOrder(Long productId, Long userId, Integer count) {
//        // 1. 查询商品是否存在
//        SeckillProduct product = seckillProductMapper.getById(productId);
//        if (product == null) {
//            throw new BaseException(MessageConstant.PRODUCT_NOT_FOUND);
//        }
//
//        // 2. 判断库存是否充足
//        if (product.getStock() < count) {
//            throw new BaseException(MessageConstant.STOCK_NOT_ENOUGH);
//        }
//
//        // 3. 判断是否超过限购数量
//        if (product.getLimitCount() != null && count > product.getLimitCount()) {
//            throw new BaseException("超过限购数量");
//        }
//
//        // 4. 扣减库存（乐观锁）
//        int updateCount = seckillProductMapper.reduceStock(productId, count);
//        if (updateCount == 0) {
//            throw new BaseException(MessageConstant.STOCK_NOT_ENOUGH);
//        }
//
//        // 5. 创建订单（这里简化处理，实际应该创建订单记录）
//        // TODO: 调用订单服务创建订单
//        Long orderId = System.currentTimeMillis(); // 模拟订单ID
        
        //log.info("用户{}秒杀下单成功，商品ID：{}，数量：{}，订单ID：{}", userId, productId, count, orderId);
        
        //return orderId;
        return null;
    }
}
